home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / misc / bgui12.lha / demos / bguidemo.c < prev    next >
C/C++ Source or Header  |  1995-07-07  |  33KB  |  1,125 lines

  1. ;/* Execute me to compile with DICE V3.0
  2. dcc bguidemo.c -proto -mi -ms -mRR -lbgui
  3. quit
  4. */
  5. /*
  6.  *    BGUIDEMO.C
  7.  *
  8.  *    (C) Copyright 1995 Jaba Development.
  9.  *    (C) Copyright 1995 Jan van den Baard.
  10.  *        All Rights Reserved.
  11.  */
  12.  
  13. #include "democode.h"
  14.  
  15. /*
  16. **    Online-Help texts.
  17. **/
  18. UBYTE        *MainHelp        = ISEQ_C "BGUI is a shared library which offers a set of\n"
  19.                       "BOOPSI classes to allow for easy and flexible GUI creation.\n\n"
  20.                       "The main window is also an AppWindow. Drop some icons\n"
  21.                       "on it and see what happens.\n\n"
  22.                       "All windows also detect the aspect ratio of the screen they are\n"
  23.                       "located on and adjust frame thickness accoording to this.\n\n"
  24.                       "All other windows in this demo also have online-help. To access\n"
  25.                       "this help press the " ISEQ_B "HELP" ISEQ_N " key when the window is active.";
  26.  
  27. UBYTE        *GroupsHelp        = ISEQ_C "The BGUI layout engine is encapsulated in the groupclass.\n"
  28.                       "The groupclass will layout all of it's members into a specific area.\n"
  29.                       "You can pass layout specific attributes to all group members\n"
  30.                       "which allows for flexible and powerful layout capabilities.";
  31.  
  32. UBYTE        *NotifHelp        = ISEQ_C "Notification can be used to let an object keep one or\n"
  33.                       "more other objects informed about it's status. BGUI offers several\n"
  34.                       "kinds of notification of which two (conditional and map-list) are\n"
  35.                       "shown in this demonstration.";
  36.  
  37. UBYTE        *InfoHelp        = ISEQ_C "Not much more can be said about the BGUI infoclass than\n"
  38.                       "is said in this window. Except maybe that this text is shown in an\n"
  39.                       "infoclass object as are all body texts from a BGUI requester.";
  40.  
  41. UBYTE        *ImageHelp        = ISEQ_C "This window shows you the built-in images that BGUI has\n"
  42.                       "to offer. Ofcourse these images are all scalable and it is possible\n"
  43.                       "to create your own, scalable, imagery with the BGUI vectorclass.";
  44.  
  45. UBYTE        *BackfillHelp        = ISEQ_C "Here you see the built-in backfill patterns BGUI supports.\n"
  46.                       "These backfill patterns can all be used in groups and frames.\n"
  47.                       "The frameclass also offers you the possibility to add hooks for\n"
  48.                       "custom backfills and frame rendering.\n\n"
  49.                       "The bottom frame shows you a custom backfill hook which renders a\n"
  50.                       "simple pattern known from the WBPattern prefs editor as background.";
  51.  
  52. UBYTE        *PagesHelp        = ISEQ_C "The pageclass allows you to setup a set of pages containing\n"
  53.                       "BGUI gadgets or groups. This will give you the oppertunity to\n"
  54.                       "have several set's of gadgets in a single window.\n\n"
  55.                       "This window has a IDCMP-hook installed which allows you to\n"
  56.                       "control the Tabs object with your TAB key.";
  57.  
  58.  
  59. /*
  60. **    Window objects.
  61. **/
  62. Object        *WA_Main  = NULL, *WA_Groups = NULL, *WA_Notif = NULL;
  63. Object        *WA_Info  = NULL, *WA_Image  = NULL, *WA_BFill = NULL;
  64. Object        *WA_Pages = NULL;
  65.  
  66. /*
  67. **    Gadget objects from the main window.
  68. **/
  69. Object        *BT_Groups,   *BT_Notif,    *BT_Quit;
  70. Object        *BT_Info,     *BT_Images,   *BT_BFill;
  71. Object        *BT_Pages,    *BT_IconDone, *BT_IconQuit;
  72. Object        *LV_IconList, *PG_Pager;
  73.  
  74. /*
  75. **    One, shared, message port for all
  76. **    demo windows.
  77. **/
  78. struct MsgPort    *SharedPort;
  79.  
  80. /*
  81. **    Menus & gadget ID's.
  82. **/
  83. #define ID_ABOUT        1L
  84. #define ID_QUIT                 2L
  85.  
  86. /*
  87. **    A small menu strip.
  88. **/
  89. struct NewMenu MainMenus[] = {
  90.     Title( "Project" ),
  91.         Item( "About...", "?", ID_ABOUT ),
  92.         ItemBar,
  93.         Item( "Quit",     "Q", ID_QUIT  ),
  94.     End
  95. };
  96.  
  97. /*
  98. **    Put up a simple requester.
  99. **/
  100. ULONG Req( struct Window *win, UBYTE *gadgets, UBYTE *body, ... )
  101. {
  102.     struct bguiRequest    req = { NULL };
  103.  
  104.     req.br_GadgetFormat    = gadgets;
  105.     req.br_TextFormat    = body;
  106.     req.br_Flags        = BREQF_CENTERWINDOW|BREQF_XEN_BUTTONS|BREQF_AUTO_ASPECT;
  107.  
  108.     return( BGUI_RequestA( win, &req, ( ULONG * )( &body + 1 )));
  109. }
  110.  
  111. /*
  112. **    Main window button ID's.
  113. **/
  114. #define ID_MAIN_GROUPS        3L
  115. #define ID_MAIN_NOTIF        4L
  116. #define ID_MAIN_INFO        5L
  117. #define ID_MAIN_IMAGE        6L
  118. #define ID_MAIN_BFILL        7L
  119. #define ID_MAIN_PAGES        8L
  120. #define ID_MAIN_ICON_CONT    9L
  121.  
  122. /*
  123. **    Open main window.
  124. **/
  125. struct Window *OpenMainWindow( ULONG *appmask )
  126. {
  127.     struct Window        *window = NULL;
  128.  
  129.     WA_Main = WindowObject,
  130.         WINDOW_Title,        "BGUIDemo - (C) Jaba Development.",
  131.         WINDOW_ScreenTitle,    "BGUIDemo - (C) Copyright 1993-1995 Jaba Development.",
  132.         WINDOW_MenuStrip,    MainMenus,
  133.         WINDOW_SmartRefresh,    TRUE,
  134.         WINDOW_AppWindow,    TRUE,
  135.         WINDOW_SizeGadget,    FALSE,
  136.         WINDOW_HelpText,    MainHelp,
  137.         WINDOW_AutoAspect,    TRUE,
  138.         WINDOW_SharedPort,    SharedPort,
  139.         WINDOW_MasterGroup,
  140.             VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  141.                 StartMember,
  142.                     PG_Pager = PageObject,
  143.                         /*
  144.                         **    Main page.
  145.                         **/
  146.                         PageMember,
  147.                             VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  148.                                 StartMember,
  149.                                     InfoObject,
  150.                                         INFO_TextFormat,    ISEQ_C
  151.                                                     "BGUIDemo\n"
  152.                                                     ISEQ_HIGHLIGHT
  153.                                                     ISEQ_B
  154.                                                     "(C) Copyright 1993-1995 Jaba Development"
  155.                                                     ISEQ_TEXT
  156.                                                     ISEQ_N
  157.                                                     "\n\n"
  158.                                                     "Press the HELP key for more info.",
  159.                                         INFO_FixTextWidth,    TRUE,
  160.                                         INFO_MinLines,        4,
  161.                                         INFO_HorizOffset,    13,
  162.                                         FRM_Type,        FRTYPE_NEXT,
  163.                                     EndObject,
  164.                                 EndMember,
  165.                                 StartMember,
  166.                                     HGroupObject, Spacing( 4 ),
  167.                                         StartMember,
  168.                                             VGroupObject, Spacing( 4 ),
  169.                                                 StartMember, BT_Groups = XenKeyButton( "_Groups",       ID_MAIN_GROUPS ), EndMember,
  170.                                                 StartMember, BT_Notif  = XenKeyButton( "_Notification", ID_MAIN_NOTIF  ), EndMember,
  171.                                                 VarSpace( DEFAULT_WEIGHT ),
  172.                                             EndObject,
  173.                                         EndMember,
  174.                                         StartMember,
  175.                                             VGroupObject, Spacing( 4 ),
  176.                                                 StartMember, BT_Images = XenKeyButton( "_Images",       ID_MAIN_IMAGE  ), EndMember,
  177.                                                 StartMember, BT_BFill  = XenKeyButton( "_BackFill",     ID_MAIN_BFILL  ), EndMember,
  178.                                                 StartMember, BT_Quit   = XenKeyButton( "_Quit",         ID_QUIT        ), EndMember,
  179.                                             EndObject,
  180.                                         EndMember,
  181.                                         StartMember,
  182.                                             VGroupObject, Spacing( 4 ),
  183.                                                 StartMember, BT_Pages  = XenKeyButton( "_Pages",        ID_MAIN_PAGES  ), EndMember,
  184.                                                 StartMember, BT_Info   = XenKeyButton( "Info_Class",    ID_MAIN_INFO   ), EndMember,
  185.                                                 VarSpace( DEFAULT_WEIGHT ),
  186.                                             EndObject,
  187.                                         EndMember,
  188.                                     EndObject, FixMinHeight,
  189.                                 EndMember,
  190.                             EndObject,
  191.                         /*
  192.                         **    Icon-drop list page.
  193.                         **/
  194.                         PageMember,
  195.                             VGroupObject, Spacing( 4 ), GROUP_BackFill, SHINE_RASTER,
  196.                                 StartMember,
  197.                                     InfoObject,
  198.                                         INFO_TextFormat,    ISEQ_C
  199.                                                     "The following icons where dropped\n"
  200.                                                     "in the window.",
  201.                                         INFO_FixTextWidth,    TRUE,
  202.                                         INFO_MinLines,        2,
  203.                                         INFO_HorizOffset,    13,
  204.                                         FRM_Type,        FRTYPE_BUTTON,
  205.                                         FRM_Recessed,        TRUE,
  206.                                     EndObject, FixMinHeight,
  207.                                 EndMember,
  208.                                 StartMember,
  209.                                     LV_IconList = ListviewObject,
  210.                                         LISTV_ReadOnly,         TRUE,
  211.                                     EndObject,
  212.                                 EndMember,
  213.                                 StartMember,
  214.                                     HGroupObject,
  215.                                         StartMember, BT_IconDone = XenKeyButton( "_Continue", ID_MAIN_ICON_CONT ), EndMember,
  216.                                         VarSpace( DEFAULT_WEIGHT ),
  217.                                         StartMember, BT_IconQuit = XenKeyButton( "_Quit",     ID_QUIT ), EndMember,
  218.                                     EndObject, FixMinHeight,
  219.                                 EndMember,
  220.                             EndObject,
  221.                     EndObject,
  222.                 EndMember,
  223.             EndObject,
  224.     EndObject;
  225.  
  226.     /*
  227.     **    Object created OK?
  228.     **/
  229.     if ( WA_Main ) {
  230.         /*
  231.         **    Add keys to the buttons.
  232.         **/
  233.         GadgetKey( WA_Main, BT_Groups,     "g" );
  234.         GadgetKey( WA_Main, BT_Notif,     "n" );
  235.         GadgetKey( WA_Main, BT_Info,     "c" );
  236.         GadgetKey( WA_Main, BT_Images,     "i" );
  237.         GadgetKey( WA_Main, BT_BFill,     "b" );
  238.         GadgetKey( WA_Main, BT_Pages,     "p" );
  239.         GadgetKey( WA_Main, BT_Quit,     "q" );
  240.         GadgetKey( WA_Main, BT_IconDone, "c" );
  241.         GadgetKey( WA_Main, BT_IconQuit, "q" );
  242.         /*
  243.         **    Open the window.
  244.         **/
  245.         if ( window = WindowOpen( WA_Main )) {
  246.             /*
  247.             **    Obtain appwindow signal mask.
  248.             **/
  249.             GetAttr( WINDOW_AppMask, WA_Main, appmask );
  250.         }
  251.     }
  252.  
  253.     return( window );
  254. }
  255.  
  256. /*
  257. **    Macros for the group objects. GObj() creates
  258. **    a simple infoclass object with some text in
  259. **    it. TObj() creates a simple groupclass object
  260. **    with a button frame.
  261. **/
  262. #define GObj(t)\
  263.     InfoObject,\
  264.         INFO_TextFormat,    t,\
  265.         INFO_FixTextWidth,    TRUE,\
  266.         INFO_HorizOffset,    4,\
  267.         INFO_VertOffset,    3,\
  268.         ButtonFrame,\
  269.         FRM_Flags,        FRF_RECESSED,\
  270.     EndObject
  271.  
  272. #define TObj\
  273.     HGroupObject, HOffset( 3 ), VOffset( 2 ),\
  274.         ButtonFrame,\
  275.         FRM_Flags,        FRF_RECESSED,\
  276.     EndObject
  277.  
  278. /*
  279. **    Open up the groups window.
  280. **/
  281. struct Window *OpenGroupsWindow( void )
  282. {
  283.     struct Window            *window = NULL;
  284.  
  285.     /*
  286.     **    If the object has not been created
  287.     **    already we build it.
  288.     **/
  289.     if ( ! WA_Groups ) {
  290.         WA_Groups = WindowObject,
  291.             WINDOW_Title,        "BGUI Groups",
  292.             WINDOW_RMBTrap,         TRUE,
  293.             WINDOW_SmartRefresh,    TRUE,
  294.             WINDOW_HelpText,    GroupsHelp,
  295.             WINDOW_AutoAspect,    TRUE,
  296.             WINDOW_SharedPort,    SharedPort,
  297.             WINDOW_MasterGroup,
  298.                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  299.                     StartMember,
  300.                         HGroupObject, Spacing( 4 ),
  301.                             StartMember,
  302.                                 HGroupObject, NeXTFrame, FrameTitle( "Horizontal" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  303.                                     StartMember, TObj, EndMember,
  304.                                     StartMember, TObj, EndMember,
  305.                                     StartMember, TObj, EndMember,
  306.                                 EndObject,
  307.                             EndMember,
  308.                             StartMember,
  309.                                 VGroupObject, NeXTFrame, FrameTitle( "Vertical" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  310.                                     StartMember, TObj, EndMember,
  311.                                     StartMember, TObj, EndMember,
  312.                                     StartMember, TObj, EndMember,
  313.                                 EndObject,
  314.                             EndMember,
  315.                             StartMember,
  316.                                 VGroupObject, NeXTFrame, FrameTitle( "Grid" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  317.                                     StartMember,
  318.                                         HGroupObject, Spacing( 4 ),
  319.                                             StartMember, TObj, EndMember,
  320.                                             StartMember, TObj, EndMember,
  321.                                             StartMember, TObj, EndMember,
  322.                                         EndObject,
  323.                                     EndMember,
  324.                                     StartMember,
  325.                                         HGroupObject, Spacing( 4 ),
  326.                                             StartMember, TObj, EndMember,
  327.                                             StartMember, TObj, EndMember,
  328.                                             StartMember, TObj, EndMember,
  329.                                         EndObject,
  330.                                     EndMember,
  331.                                     StartMember,
  332.                                         HGroupObject, Spacing( 4 ),
  333.                                             StartMember, TObj, EndMember,
  334.                                             StartMember, TObj, EndMember,
  335.                                             StartMember, TObj, EndMember,
  336.                                         EndObject,
  337.                                     EndMember,
  338.                                 EndObject,
  339.                             EndMember,
  340.                         EndObject,
  341.                     EndMember,
  342.                     StartMember,
  343.                         VGroupObject, Spacing( 4 ),
  344.                             StartMember, TitleSeperator( "Free, Fixed and Weight sizes." ), EndMember,
  345.                             StartMember,
  346.                                 HGroupObject, Spacing( 4 ),
  347.                                     StartMember, GObj( ISEQ_C "25Kg"  ), Weight( 25  ), EndMember,
  348.                                     StartMember, GObj( ISEQ_C "50Kg"  ), Weight( 50  ), EndMember,
  349.                                     StartMember, GObj( ISEQ_C "75Kg"  ), Weight( 75  ), EndMember,
  350.                                     StartMember, GObj( ISEQ_C "100Kg" ), Weight( 100 ), EndMember,
  351.                                 EndObject,
  352.                             EndMember,
  353.                             StartMember,
  354.                                 HGroupObject, Spacing( 4 ),
  355.                                     StartMember, GObj( ISEQ_C     "Free"  ), EndMember,
  356.                                     StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  357.                                     StartMember, GObj( ISEQ_C     "Free"  ), EndMember,
  358.                                     StartMember, GObj( ISEQ_C ISEQ_B "Fixed" ), FixMinWidth, EndMember,
  359.                                 EndObject,
  360.                             EndMember,
  361.                         EndObject, FixMinHeight,
  362.                     EndMember,
  363.                 EndObject,
  364.         EndObject;
  365.     }
  366.  
  367.     /*
  368.     **    Object OK?
  369.     **/
  370.     if ( WA_Groups ) {
  371.         /*
  372.         **    Open the window.
  373.         **/
  374.         window = WindowOpen( WA_Groups );
  375.     }
  376.  
  377.     return( window );
  378. }
  379.  
  380. /*
  381. **    Cycle gadget labels.
  382. **/
  383. UBYTE    *NotifLabels[] = { "Enabled-->", "Disabled-->", "Still Disabled-->", NULL };
  384.  
  385. /*
  386. **    Notification map-lists.
  387. **/
  388. ULONG    pga2sl[] = { PGA_Top,        SLIDER_Level,  TAG_END };
  389. ULONG    sl2prg[] = { SLIDER_Level,  PROGRESS_Done, TAG_END };
  390. ULONG    prg2in[] = { PROGRESS_Done, INDIC_Level,   TAG_END };
  391.  
  392. /*
  393. **    Open the notification window.
  394. **/
  395. struct Window *OpenNotifWindow( void )
  396. {
  397.     struct Window            *window = NULL;
  398.     Object                *c, *b, *p1, *p2, *s1, *s2, *p, *i1, *i2;
  399.  
  400.     /*
  401.     **    Not created yet? Create it now!
  402.     **/
  403.     if ( ! WA_Notif ) {
  404.         WA_Notif = WindowObject,
  405.             WINDOW_Title,        "BGUI notification",
  406.             WINDOW_RMBTrap,         TRUE,
  407.             WINDOW_SmartRefresh,    TRUE,
  408.             WINDOW_HelpText,    NotifHelp,
  409.             WINDOW_AutoAspect,    TRUE,
  410.             WINDOW_SharedPort,    SharedPort,
  411.             WINDOW_MasterGroup,
  412.                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  413.                     StartMember, TitleSeperator( "Conditional" ), EndMember,
  414.                     StartMember,
  415.                         HGroupObject, Spacing( 4 ),
  416.                             StartMember, c = XenCycle( NULL, NotifLabels, 0, 0 ), EndMember,
  417.                             StartMember, b = XenButton( "Target", 0 ), EndMember,
  418.                         EndObject, FixMinHeight,
  419.                     EndMember,
  420.                     StartMember, TitleSeperator( "Map-List" ), EndMember,
  421.                     StartMember,
  422.                         HGroupObject, Spacing( 4 ),
  423.                             StartMember,
  424.                                 VGroupObject, Spacing( 4 ),
  425.                                     StartMember, i1 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  426.                                     StartMember, p1 = HorizProgress( NULL, 0, 100, 0 ), EndMember,
  427.                                 EndObject,
  428.                             EndMember,
  429.                             StartMember, s1 = VertSlider(    NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  430.                             StartMember, p    = VertScroller( NULL, 0, 101, 1, 0 ), FixWidth( 16 ), EndMember,
  431.                             StartMember, s2 = VertSlider(    NULL, 0, 100, 0, 0 ), FixWidth( 16 ), EndMember,
  432.                             StartMember,
  433.                                 VGroupObject, Spacing( 4 ),
  434.                                     StartMember, i2 = IndicatorFormat( 0, 100, 0, IDJ_CENTER, "%ld%%" ), FixMinHeight, EndMember,
  435.                                     StartMember, p2 = VertProgress( NULL, 0, 100, 0 ), EndMember,
  436.                                 EndObject,
  437.                             EndMember,
  438.                         EndObject,
  439.                     EndMember,
  440.                 EndObject,
  441.         EndObject;
  442.  
  443.         if ( WA_Notif ) {
  444.             /*
  445.             **    Connect the cycle object with the button.
  446.             **/
  447.             AddCondit( c, b, CYC_Active, 0, GA_Disabled, FALSE, GA_Disabled, TRUE );
  448.             /*
  449.             **    Connect sliders, prop, progression and indicators.
  450.             **/
  451.             AddMap( s1, p1, sl2prg );
  452.             AddMap( s2, p2, sl2prg );
  453.             AddMap( p,  s1, pga2sl );
  454.             AddMap( p,  s2, pga2sl );
  455.             AddMap( p1, i1, prg2in );
  456.             AddMap( p2, i2, prg2in );
  457.         }
  458.     }
  459.  
  460.     /*
  461.     **    Object OK?
  462.     **/
  463.     if ( WA_Notif ) {
  464.         /*
  465.         **    Open window.
  466.         **/
  467.         window = WindowOpen( WA_Notif );
  468.     }
  469.  
  470.     return( window );
  471. }
  472.  
  473. /*
  474. **    Open infoclass window.
  475. **/
  476. struct Window *OpenInfoWindow( void )
  477. {
  478.     struct Window            *window = NULL;
  479.     ULONG                 args[2];
  480.  
  481.     /*
  482.     **    Setup arguments for the
  483.     **    infoclass object.
  484.     **/
  485.     args[0] = AvailMem( MEMF_CHIP );
  486.     args[1] = AvailMem( MEMF_FAST );
  487.  
  488.     /*
  489.     **    Not created already?
  490.     **/
  491.     if ( ! WA_Info ) {
  492.         WA_Info = WindowObject,
  493.             WINDOW_Title,        "BGUI information class",
  494.             WINDOW_RMBTrap,         TRUE,
  495.             WINDOW_SmartRefresh,    TRUE,
  496.             WINDOW_HelpText,    InfoHelp,
  497.             WINDOW_AutoAspect,    TRUE,
  498.             WINDOW_SharedPort,    SharedPort,
  499.             WINDOW_MasterGroup,
  500.                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  501.                     StartMember,
  502.                         InfoFixed( NULL,
  503.                                ISEQ_C "BGUI offers the InfoClass.\n"
  504.                                "This class is a text display class which\n"
  505.                                "allows things like:\n\n"
  506.                                ISEQ_SHINE      "C"
  507.                                ISEQ_SHADOW      "o"
  508.                                ISEQ_FILL      "l"
  509.                                ISEQ_FILLTEXT  "o"
  510.                                ISEQ_HIGHLIGHT "r"
  511.                                ISEQ_TEXT      "s\n\n"
  512.                                ISEQ_L "Left Aligned...\n"
  513.                                ISEQ_R "Right Aligned...\n"
  514.                                ISEQ_C "Centered...\n\n"
  515.                                ISEQ_B "Bold...\n"   ISEQ_N
  516.                                ISEQ_I "Italic...\n" ISEQ_N
  517.                                ISEQ_U "Underlined...\n\n"
  518.                                ISEQ_B ISEQ_I "And combinations!\n\n"
  519.                                ISEQ_N "Free CHIP:" ISEQ_SHINE " %lD" ISEQ_TEXT", Free FAST:" ISEQ_SHINE " %lD\n",
  520.                                &args[ 0 ],
  521.                                17 ),
  522.                     EndMember,
  523.                 EndObject,
  524.         EndObject;
  525.     }
  526.  
  527.     /*
  528.     **    Object OK?
  529.     **/
  530.     if ( WA_Info ) {
  531.         /*
  532.         **    Open window.
  533.         **/
  534.         window = WindowOpen( WA_Info );
  535.     }
  536.  
  537.     return( window );
  538. }
  539.  
  540. /*
  541. **    Open images window.
  542. **/
  543. struct Window *OpenImageWindow( void )
  544. {
  545.     struct Window            *window = NULL;
  546.  
  547.     /*
  548.     **    Not yet created?
  549.     **/
  550.     if ( ! WA_Image ) {
  551.         WA_Image = WindowObject,
  552.             WINDOW_Title,        "BGUI images",
  553.             WINDOW_RMBTrap,         TRUE,
  554.             WINDOW_SmartRefresh,    TRUE,
  555.             WINDOW_HelpText,    ImageHelp,
  556.             WINDOW_AutoAspect,    TRUE,
  557.             WINDOW_SharedPort,    SharedPort,
  558.             WINDOW_MasterGroup,
  559.                 VGroupObject, HOffset( 4 ), VOffset( 4 ),
  560.                     StartMember,
  561.                         HGroupObject, NeXTFrame, FrameTitle( "Fixed size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  562.                             VarSpace( DEFAULT_WEIGHT ),
  563.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, FixWidth( GETPATH_WIDTH     ), FixHeight( GETPATH_HEIGHT      ), EndMember,
  564.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, FixWidth( GETFILE_WIDTH     ), FixHeight( GETFILE_HEIGHT      ), EndMember,
  565.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, FixWidth( CHECKMARK_WIDTH     ), FixHeight( CHECKMARK_HEIGHT   ), EndMember,
  566.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,         ButtonFrame, EndObject, FixWidth( POPUP_WIDTH     ), FixHeight( POPUP_HEIGHT      ), EndMember,
  567.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, FixWidth( ARROW_UP_WIDTH     ), FixHeight( ARROW_UP_HEIGHT      ), EndMember,
  568.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, FixWidth( ARROW_DOWN_WIDTH  ), FixHeight( ARROW_DOWN_HEIGHT  ), EndMember,
  569.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, FixWidth( ARROW_LEFT_WIDTH  ), FixHeight( ARROW_LEFT_HEIGHT  ), EndMember,
  570.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, FixWidth( ARROW_RIGHT_WIDTH ), FixHeight( ARROW_RIGHT_HEIGHT ), EndMember,
  571.                             VarSpace( DEFAULT_WEIGHT ),
  572.                         EndObject, FixMinHeight,
  573.                     EndMember,
  574.                     StartMember,
  575.                         HGroupObject, NeXTFrame, FrameTitle( "Free size" ), HOffset( 8 ), TOffset( 4 ), BOffset( 6 ), Spacing( 4 ),
  576.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETPATH,     ButtonFrame, EndObject, EndMember,
  577.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_GETFILE,     ButtonFrame, EndObject, EndMember,
  578.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_CHECKMARK,   ButtonFrame, EndObject, EndMember,
  579.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_POPUP,         ButtonFrame, EndObject, EndMember,
  580.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_UP,    ButtonFrame, EndObject, EndMember,
  581.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_DOWN,  ButtonFrame, EndObject, EndMember,
  582.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_LEFT,  ButtonFrame, EndObject, EndMember,
  583.                             StartMember, ButtonObject, VIT_BuiltIn, BUILTIN_ARROW_RIGHT, ButtonFrame, EndObject, EndMember,
  584.                         EndObject,
  585.                     EndMember,
  586.                 EndObject,
  587.         EndObject;
  588.     }
  589.  
  590.     /*
  591.     **    Object OK?
  592.     **/
  593.     if ( WA_Image ) {
  594.         /*
  595.         **    Open the window.
  596.         **/
  597.         window = WindowOpen( WA_Image );
  598.     }
  599.  
  600.     return( window );
  601. }
  602.  
  603. /*
  604. **    The BackFill hook to show custom backfills.
  605. **    Renders a pattern from the WBPattern preferences
  606. **    editor as back-fill.
  607. **/
  608. SAVEDS ASM ULONG BackFillHook( REG(a0) struct Hook *hook, REG(a2) Object *imo, REG(a1) struct FrameDrawMsg *fdm )
  609. {
  610.     UWORD    pat[] = { 0x0000, 0x0000, 0x0002, 0x0002, 0x000A, 0x000A, 0x002A, 0x002A,
  611.               0x00AA, 0x002A, 0x03EA, 0x000A, 0x0FFA, 0x0002, 0x3FFE, 0x0000,
  612.               0x0000, 0x7FFC, 0x4000, 0x5FF0, 0x5000, 0x57C0, 0x5400, 0x5500,
  613.               0x5400, 0x5400, 0x5000, 0x5000, 0x4000, 0x4000, 0x0000, 0x0000,
  614.               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
  615.               0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 };
  616.  
  617.     SetAfPt( fdm->fdm_RPort, pat, -4 );
  618.     SetAPen( fdm->fdm_RPort, ( 1 << fdm->fdm_DrawInfo->dri_Depth ) - 1 );
  619.     RectFill( fdm->fdm_RPort, fdm->fdm_Bounds->MinX, fdm->fdm_Bounds->MinY,
  620.                   fdm->fdm_Bounds->MaxX, fdm->fdm_Bounds->MaxY );
  621.     SetAfPt( fdm->fdm_RPort, NULL, 0 );
  622.  
  623.     return( FRC_OK );
  624. }
  625.  
  626. /*
  627. **    The hook structure.
  628. **/
  629. struct Hook BackFill = {
  630.     NULL, NULL, (HOOKFUNC)BackFillHook, NULL, NULL
  631. };
  632.  
  633. /*
  634. **    Open back-fill window.
  635. **/
  636. struct Window *OpenFillWindow( void )
  637. {
  638.     struct Window            *window = NULL;
  639.  
  640.     /*
  641.     **    Not yet created?
  642.     **/
  643.     if ( ! WA_BFill ) {
  644.         WA_BFill = WindowObject,
  645.             WINDOW_Title,        "BGUI back fill patterns",
  646.             WINDOW_RMBTrap,         TRUE,
  647.             WINDOW_SmartRefresh,    TRUE,
  648.             WINDOW_HelpText,    BackfillHelp,
  649.             WINDOW_ScaleWidth,    50,
  650.             WINDOW_ScaleHeight,    50,
  651.             WINDOW_AutoAspect,    TRUE,
  652.             WINDOW_SharedPort,    SharedPort,
  653.             WINDOW_MasterGroup,
  654.                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  655.                     StartMember,
  656.                         HGroupObject, Spacing( 4 ),
  657.                             StartMember, InfoObject, ButtonFrame, ShineRaster,  EndObject, EndMember,
  658.                             StartMember, InfoObject, ButtonFrame, ShadowRaster, EndObject, EndMember,
  659.                         EndObject,
  660.                     EndMember,
  661.                     StartMember,
  662.                         HGroupObject, Spacing( 4 ),
  663.                             StartMember, InfoObject, ButtonFrame, ShineShadowRaster, EndObject, EndMember,
  664.                             StartMember, InfoObject, ButtonFrame, FillRaster,     EndObject, EndMember,
  665.                         EndObject,
  666.                     EndMember,
  667.                     StartMember,
  668.                         HGroupObject, Spacing( 4 ),
  669.                             StartMember, InfoObject, ButtonFrame, ShineFillRaster,    EndObject, EndMember,
  670.                             StartMember, InfoObject, ButtonFrame, ShadowFillRaster, EndObject, EndMember,
  671.                         EndObject,
  672.                     EndMember,
  673.                     StartMember,
  674.                         HGroupObject, Spacing( 4 ),
  675.                             StartMember, InfoObject, ButtonFrame, ShineBlock,  EndObject, EndMember,
  676.                             StartMember, InfoObject, ButtonFrame, ShadowBlock, EndObject, EndMember,
  677.                         EndObject,
  678.                     EndMember,
  679.                     StartMember, HorizSeperator, EndMember,
  680.                     StartMember, InfoObject, ButtonFrame, FRM_BackFillHook, &BackFill, EndObject, Weight( 200 ), EndMember,
  681.                 EndObject,
  682.         EndObject;
  683.     }
  684.  
  685.     /*
  686.     **    Object OK?
  687.     **/
  688.     if ( WA_BFill ) {
  689.         /*
  690.         **    Open window.
  691.         **/
  692.         window = WindowOpen( WA_BFill );
  693.     }
  694.  
  695.     return( window );
  696. }
  697.  
  698. /*
  699. **    Cycle and Mx labels.
  700. **/
  701. UBYTE *PageLab[] = { "Buttons", "Strings", "CheckBoxes", "Radio-Buttons", NULL };
  702. UBYTE *MxLab[]     = { "MX #1",   "MX #2",   "MX #3",      "MX #4",         NULL };
  703.  
  704. /*
  705. **    Cycle to Page map-list.
  706. **/
  707. ULONG Cyc2Page[] = { MX_Active, PAGE_Active, TAG_END };
  708.  
  709. /*
  710. **    Create a MX object with a title on top.
  711. **/
  712. #define MxGadget(label,labels)\
  713.     MxObject,\
  714.         GROUP_Style,        GRSTYLE_VERTICAL,\
  715.         LAB_Label,        label,\
  716.         LAB_Place,        PLACE_ABOVE,\
  717.         LAB_Underscore,         '_',\
  718.         LAB_Highlight,        TRUE,\
  719.         MX_Labels,        labels,\
  720.         MX_LabelPlace,        PLACE_LEFT,\
  721.     EndObject, FixMinSize
  722.  
  723. /*
  724. **    Tabs-key control of the tabs gadget.
  725. **/
  726. SAVEDS ASM VOID TabHookFunc( REG(a0) struct Hook *hook, REG(a2) Object *obj, REG(a1) struct IntuiMessage *msg )
  727. {
  728.     struct Window            *window;
  729.     Object                *mx_obj = ( Object * )hook->h_Data;
  730.     ULONG                 pos;
  731.  
  732.     /*
  733.     **    Obtain window pointer and
  734.     **    current tab position.
  735.     **/
  736.     GetAttr( WINDOW_Window, obj,    ( ULONG * )&window );
  737.     GetAttr( MX_Active,    mx_obj, &pos );
  738.  
  739.     /*
  740.     **    What key is pressed?
  741.     **/
  742.     if ( msg->Code == 0x42 ) {
  743.         if ( msg->Qualifier & ( IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT )) pos--;
  744.         else                                   pos++;
  745.         SetGadgetAttrs(( struct Gadget * )mx_obj, window, NULL, MX_Active, pos, TAG_END );
  746.     }
  747. }
  748.  
  749. struct Hook TabHook = { NULL, NULL, ( HOOKFUNC )TabHookFunc, NULL, NULL };
  750.  
  751. /*
  752. **    Open pages window.
  753. **/
  754. struct Window *OpenPagesWindow( void )
  755. {
  756.     Object                *c, *p, *m, *s1, *s2, *s3;
  757.     struct Window            *window = NULL;
  758.  
  759.     /*
  760.     **    Not yet created?
  761.     **/
  762.     if ( ! WA_Pages ) {
  763.         /*
  764.         **    Create tabs-object.
  765.         **/
  766.         c = Tabs( NULL, PageLab, 0, 0 );
  767.  
  768.         /*
  769.         **    Put it in the hook data.
  770.         **/
  771.         TabHook.h_Data = ( APTR )c;
  772.  
  773.         WA_Pages = WindowObject,
  774.             WINDOW_Title,        "BGUI pages",
  775.             WINDOW_RMBTrap,         TRUE,
  776.             WINDOW_SmartRefresh,    TRUE,
  777.             WINDOW_HelpText,    PagesHelp,
  778.             WINDOW_AutoAspect,    TRUE,
  779.             WINDOW_IDCMPHookBits,    IDCMP_RAWKEY,
  780.             WINDOW_IDCMPHook,    &TabHook,
  781.             WINDOW_SharedPort,    SharedPort,
  782.             WINDOW_MasterGroup,
  783.                 VGroupObject, HOffset( 4 ), VOffset( 4 ), Spacing( 4 ),
  784.                     StartMember, c, FixMinHeight, EndMember,
  785.                     StartMember,
  786.                         p = PageObject,
  787.                             /*
  788.                             **    Button page.
  789.                             **/
  790.                             PageMember,
  791.                                 VGroupObject, Spacing(4),
  792.                                     VarSpace( DEFAULT_WEIGHT ),
  793.                                     StartMember, XenButton( "Button #1", 0 ), FixMinHeight, EndMember,
  794.                                     StartMember, XenButton( "Button #2", 0 ), FixMinHeight, EndMember,
  795.                                     StartMember, XenButton( "Button #3", 0 ), FixMinHeight, EndMember,
  796.                                     VarSpace( DEFAULT_WEIGHT ),
  797.                                 EndObject,
  798.                             /*
  799.                             **    String page.
  800.                             **/
  801.                             PageMember,
  802.                                 VGroupObject, Spacing(4),
  803.                                     VarSpace( DEFAULT_WEIGHT ),
  804.                                     StartMember, s1 = String( "String #1", "", 256, 0 ), FixMinHeight, EndMember,
  805.                                     StartMember, s2 = String( "String #2", "", 256, 0 ), FixMinHeight, EndMember,
  806.                                     StartMember, s3 = String( "String #3", "", 256, 0 ), FixMinHeight, EndMember,
  807.                                     VarSpace( DEFAULT_WEIGHT ),
  808.                                 EndObject,
  809.                             /*
  810.                             **    CheckBox page.
  811.                             **/
  812.                             PageMember,
  813.                                 VGroupObject, Spacing(4),
  814.                                     StartMember,
  815.                                         HGroupObject, Spacing( 4 ),
  816.                                             VarSpace( DEFAULT_WEIGHT ),
  817.                                             StartMember,
  818.                                                 VGroupObject, Spacing( 4 ),
  819.                                                     VarSpace( DEFAULT_WEIGHT ),
  820.                                                     StartMember, CheckBox( "CheckBox #1", FALSE, 0 ), EndMember,
  821.                                                     StartMember, CheckBox( "CheckBox #2", FALSE, 0 ), EndMember,
  822.                                                     StartMember, CheckBox( "CheckBox #3", FALSE, 0 ), EndMember,
  823.                                                     VarSpace( DEFAULT_WEIGHT ),
  824.                                                 EndObject, FixMinWidth,
  825.                                             EndMember,
  826.                                             VarSpace( DEFAULT_WEIGHT ),
  827.                                         EndObject,
  828.                                     EndMember,
  829.                                 EndObject,
  830.                             /*
  831.                             **    Mx page.
  832.                             **/
  833.                             PageMember,
  834.                                 VGroupObject, Spacing(4),
  835.                                     VarSpace( DEFAULT_WEIGHT ),
  836.                                     StartMember,
  837.                                         HGroupObject,
  838.                                             VarSpace( DEFAULT_WEIGHT ),
  839.                                             StartMember, m = MxGadget( "_Mx Object", MxLab ), EndMember,
  840.                                             VarSpace( DEFAULT_WEIGHT ),
  841.                                         EndObject, FixMinHeight,
  842.                                     EndMember,
  843.                                     VarSpace( DEFAULT_WEIGHT ),
  844.                                 EndObject,
  845.                         EndObject,
  846.                     EndMember,
  847.                 EndObject,
  848.         EndObject;
  849.  
  850.         /*
  851.         **    Object OK?
  852.         **/
  853.         if ( WA_Pages ) {
  854.             /*
  855.             **    Add key for the MX object.
  856.             **/
  857.             GadgetKey( WA_Pages, m, "m" );
  858.             /*
  859.             **    Connect the cycle to the page.
  860.             **/
  861.             AddMap( c, p, Cyc2Page );
  862.             /*
  863.             **    Set tab-cycling order.
  864.             **/
  865.             DoMethod( WA_Pages, WM_TABCYCLE_ORDER, s1, s2, s3, NULL );
  866.         }
  867.     }
  868.  
  869.     /*
  870.     **    Object OK?
  871.     **/
  872.     if ( WA_Pages ) {
  873.         /*
  874.         **    Open the window.
  875.         **/
  876.         window = WindowOpen( WA_Pages );
  877.     }
  878.  
  879.     return( window );
  880. }
  881.  
  882. /*
  883. **    Main entry.
  884. **/
  885. VOID StartDemo( void )
  886. {
  887.     struct Window           *main = NULL, *groups = NULL, *notif = NULL, *info = NULL, *image = NULL, *bfill = NULL, *pages = NULL, *sigwin = ( struct Window * )~0;
  888.     struct AppMessage      *apm;
  889.     struct WBArg           *ap;
  890.     ULONG            sigmask = 0L, sigrec, rc, i, appsig = 0L;
  891.     BOOL            running = TRUE;
  892.     UBYTE            name[ 256 ];
  893.  
  894.     /*
  895.     **    Create the shared message port.
  896.     **/
  897.     if ( SharedPort = CreateMsgPort()) {
  898.         /*
  899.         **    Open the main window.
  900.         **/
  901.         if ( main = OpenMainWindow( &appsig )) {
  902.             /*
  903.             **    OR signal masks.
  904.             **/
  905.             sigmask |= ( appsig | ( 1L << SharedPort->mp_SigBit ));
  906.             /*
  907.             **    Loop...
  908.             **/
  909.             do {
  910.                 /*
  911.                 **    Wait for the signals to come.
  912.                 **/
  913.                 sigrec = Wait( sigmask );
  914.  
  915.                 /*
  916.                 **    AppWindow signal?
  917.                 **/
  918.                 if ( sigrec & appsig ) {
  919.                     /*
  920.                     **    Obtain AppWindow messages.
  921.                     **/
  922.                     while ( apm = GetAppMsg( WA_Main )) {
  923.                         /*
  924.                         **    Get all dropped icons.
  925.                         **/
  926.                         for ( ap = apm->am_ArgList, i = 0; i < apm->am_NumArgs; i++, ap++ ) {
  927.                             /*
  928.                             **    Build fully qualified name.
  929.                             **/
  930.                             NameFromLock( ap->wa_Lock, name, 256 );
  931.                             AddPart( name, ap->wa_Name, 256 );
  932.                             /*
  933.                             **    Add it to the listview.
  934.                             **/
  935.                             AddEntry( main, LV_IconList, (APTR)name, LVAP_SORTED );
  936.                         }
  937.                         /*
  938.                         **    Important! We must reply the message!
  939.                         **/
  940.                         ReplyMsg(( struct Message * )apm );
  941.                     }
  942.                     /*
  943.                     **    Switch to the Icon page.
  944.                     **/
  945.                     SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 1, TAG_END );
  946.                 }
  947.  
  948.                 /*
  949.                 **    Find out the which window signalled us.
  950.                 **/
  951.                 if ( sigrec & ( 1 << SharedPort->mp_SigBit )) {
  952.                     while ( sigwin = GetSignalWindow( WA_Main )) {
  953.  
  954.                         /*
  955.                         **    Main window signal?
  956.                         **/
  957.                         if ( sigwin == main ) {
  958.                             /*
  959.                             **    Call the main-window event handler.
  960.                             **/
  961.                             while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  962.                                 switch ( rc ) {
  963.  
  964.                                     case    WMHI_CLOSEWINDOW:
  965.                                     case    ID_QUIT:
  966.                                         running = FALSE;
  967.                                         break;
  968.  
  969.                                     case    ID_ABOUT:
  970.                                         Req( main, "OK", ISEQ_C ISEQ_B "\33d8BGUIDemo" ISEQ_N "\33d2\n(C) Copyright 1993-1995 Jaba Development" );
  971.                                         break;
  972.  
  973.                                     case    ID_MAIN_GROUPS:
  974.                                         /*
  975.                                         **    Open groups window.
  976.                                         **/
  977.                                         if ( ! groups )
  978.                                             groups = OpenGroupsWindow();
  979.                                         break;
  980.  
  981.                                     case    ID_MAIN_NOTIF:
  982.                                         /*
  983.                                         **    Open notification window.
  984.                                         **/
  985.                                         if ( ! notif )
  986.                                             notif = OpenNotifWindow();
  987.                                         break;
  988.  
  989.                                     case    ID_MAIN_INFO:
  990.                                         /*
  991.                                         **    Open infoclass window.
  992.                                         **/
  993.                                         if ( ! info )
  994.                                             info = OpenInfoWindow();
  995.                                         break;
  996.  
  997.                                     case    ID_MAIN_IMAGE:
  998.                                         /*
  999.                                         **    Open images window.
  1000.                                         **/
  1001.                                         if ( ! image )
  1002.                                             image = OpenImageWindow();
  1003.                                         break;
  1004.  
  1005.                                     case    ID_MAIN_BFILL:
  1006.                                         /*
  1007.                                         **    Open backfill window.
  1008.                                         **/
  1009.                                         if ( ! bfill )
  1010.                                             bfill = OpenFillWindow();
  1011.                                         break;
  1012.  
  1013.                                     case    ID_MAIN_PAGES:
  1014.                                         /*
  1015.                                         **    Open pages window.
  1016.                                         **/
  1017.                                         if ( ! pages )
  1018.                                             pages = OpenPagesWindow();
  1019.                                         break;
  1020.  
  1021.                                     case    ID_MAIN_ICON_CONT:
  1022.                                         /*
  1023.                                         **    Switch back to the main page.
  1024.                                         **/
  1025.                                         SetGadgetAttrs(( struct Gadget * )PG_Pager, main, NULL, PAGE_Active, 0, TAG_END );
  1026.                                         /*
  1027.                                         **    Clear all entries from the listview.
  1028.                                         **/
  1029.                                         ClearList( main, LV_IconList );
  1030.                                         break;
  1031.                                 }
  1032.                             }
  1033.                         }
  1034.  
  1035.                         /*
  1036.                         **    The code below will close the
  1037.                         **    specific window.
  1038.                         **/
  1039.                         if ( sigwin == groups ) {
  1040.                             while (( rc = HandleEvent( WA_Groups )) != WMHI_NOMORE ) {
  1041.                                 switch ( rc ) {
  1042.                                     case    WMHI_CLOSEWINDOW:
  1043.                                         WindowClose( WA_Groups );
  1044.                                         groups = NULL;
  1045.                                         break;
  1046.                                 }
  1047.                             }
  1048.                         }
  1049.  
  1050.                         if ( sigwin == notif ) {
  1051.                             while (( rc = HandleEvent( WA_Notif )) != WMHI_NOMORE ) {
  1052.                                 switch ( rc ) {
  1053.                                     case    WMHI_CLOSEWINDOW:
  1054.                                         WindowClose( WA_Notif );
  1055.                                         notif = NULL;
  1056.                                         break;
  1057.                                 }
  1058.                             }
  1059.                         }
  1060.  
  1061.                         if ( sigwin == info ) {
  1062.                             while (( rc = HandleEvent( WA_Info )) != WMHI_NOMORE ) {
  1063.                                 switch ( rc ) {
  1064.                                     case    WMHI_CLOSEWINDOW:
  1065.                                         WindowClose( WA_Info );
  1066.                                         info = NULL;
  1067.                                         break;
  1068.                                 }
  1069.                             }
  1070.                         }
  1071.  
  1072.                         if ( sigwin == image ) {
  1073.                             while (( rc = HandleEvent( WA_Image )) != WMHI_NOMORE ) {
  1074.                                 switch ( rc ) {
  1075.                                     case    WMHI_CLOSEWINDOW:
  1076.                                         WindowClose( WA_Image );
  1077.                                         image = NULL;
  1078.                                         break;
  1079.                                 }
  1080.                             }
  1081.                         }
  1082.  
  1083.                         if ( sigwin == bfill ) {
  1084.                             while (( rc = HandleEvent( WA_BFill )) != WMHI_NOMORE ) {
  1085.                                 switch ( rc ) {
  1086.                                     case    WMHI_CLOSEWINDOW:
  1087.                                         WindowClose( WA_BFill );
  1088.                                         bfill = NULL;
  1089.                                         break;
  1090.                                 }
  1091.                             }
  1092.                         }
  1093.  
  1094.                         if ( sigwin == pages ) {
  1095.                             while (( rc = HandleEvent( WA_Pages )) != WMHI_NOMORE ) {
  1096.                                 switch ( rc ) {
  1097.                                     case    WMHI_CLOSEWINDOW:
  1098.                                         WindowClose( WA_Pages );
  1099.                                         pages = NULL;
  1100.                                         break;
  1101.                                 }
  1102.                             }
  1103.                         }
  1104.                     }
  1105.                 }
  1106.             } while ( running );
  1107.         }
  1108.         /*
  1109.         **    Dispose of all window objects.
  1110.         **/
  1111.         if ( WA_Pages )         DisposeObject( WA_Pages );
  1112.         if ( WA_BFill )         DisposeObject( WA_BFill );
  1113.         if ( WA_Image )         DisposeObject( WA_Image );
  1114.         if ( WA_Info )        DisposeObject( WA_Info );
  1115.         if ( WA_Notif )         DisposeObject( WA_Notif );
  1116.         if ( WA_Groups )    DisposeObject( WA_Groups );
  1117.         if ( WA_Main )        DisposeObject( WA_Main );
  1118.         /*
  1119.         **    Delete the shared message port.
  1120.         **/
  1121.         DeleteMsgPort( SharedPort );
  1122.     } else
  1123.         Tell( "Unable to create a message port.\n" );
  1124. }
  1125.